
package com.hc.controller;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.hc.domain.Role;
import com.hc.domain.UserAndRole;
import com.hc.service.IRoleService;
import com.hc.service.IUserAndRoleService;
import com.hc.service.impl.UserAndRoleServiceImpl;
import com.hc.util.LoggerUtil;
@Controller
@RequestMapping("Role")
public class RoleController extends BaseController{
	
	@Resource
	private IRoleService roleService;
	@Resource
	private IUserAndRoleService userAndRoleService;
	/**
	 * 
	 * @Description： 获取所有角色（部门）
	 * @param req
	 * @param resp
	 * @return
	 * @author:  
	 * @since: 2017年6月26日 下午2:51:09
	 */
	@ResponseBody
	@RequestMapping("/getAllRoles")
	public JSON getAllRoles(HttpServletRequest req,HttpServletResponse resp){
		List<Role> roles = roleService.findAll();
		return Message(SUCCESS, "获取数据成功", roles);
	}
	/**
	 * 

	 * @param req
	 * @param resp
	 * @param roleName 角色名
	 * @return
	 * @author:  
	 * @since: 2017年6月22日 上午10:42:32
	 */
	@ResponseBody
	@RequestMapping(value="/addUserRole",method = RequestMethod.POST)
	private JSON addUserRole(HttpServletRequest req,HttpServletResponse resp, @RequestParam(value="ids[]",required=true)Integer[] ids, @RequestParam(value="roleId",required=true)Integer roleId){
		if (ids==null||ids.length<=0){
			return Message(ERROR, "请选择需要分配的用户", null);
		}
		for (Integer id:ids){
			UserAndRole uar = userAndRoleService.getUserRoleByUserId(id);
			if (uar!=null){
				uar.setRoleId(roleId);
			}else{
				uar = new UserAndRole();
				uar.setAdminId(id);
				uar.setRoleId(roleId);
			}
			userAndRoleService.updateOrSave(uar);
		}
		return Message(SUCCESS, "分组成功", null);
	}
	
	/**
	 * 
	 * @Description： 添加角色
	 * @param req
	 * @param resp
	 * @param roleName 角色名
	 * @return
	 * @author:  
	 * @since: 2017年6月22日 上午10:42:32
	 */
	@ResponseBody
	@RequestMapping("/addRole")
	private JSON addRole(HttpServletRequest req,HttpServletResponse resp, @RequestParam(value="roleName",required=true)String roleName){
		String trimString = roleName.trim();
		if (isEmpty(trimString)){
			return Message(ERROR, "请填写部门名称", null);
		}
		Role role = roleService.getRoleByRoleName(roleName);
		if (role!=null){
			return Message(ERROR, "当前部门中已存在同名部门，请重新命名", null);
		}
		role = new Role();
		role.setRole(trimString);
		role.setStatus(1);
		roleService.updateOrSave(role);
		return Message(SUCCESS, "角色添加成功", role);
	}
	/**
	 * 
	 * @Description： 删除角色
	 * @param req
	 * @param resp 
	 * @param id 角色id
	 * @return
	 * @author:  
	 * @since: 2017年6月22日 上午10:42:18
	 */
	@ResponseBody
	@RequestMapping("/delRole")
	private JSON delRole(HttpServletRequest req,HttpServletResponse resp, @RequestParam(value="id",required=true)int id){
		if (id==1){
			return Message(ERROR, "该部门不允许删除", null);
		}
		Role role = roleService.getRoleById(id);
		if (role==null){
			return Message(ERROR, "该部门不存在", null);
		}
		try {
			roleService.deleteRoleAndAuth(role);
		} catch (Exception e) {
			return LoggerUtil.logInfo(e, "出错啦>_<！");
		}
		return Message(SUCCESS, "删除成功", null);
	}
	/**
	 * 
	 * @Description： 修改role
	 * @param req
	 * @param resp
	 * @param id id
	 * @param roleName 角色名
	 * @return
	 * @author:  
	 * @since: 2017年6月22日 下午12:02:37
	 */
	@ResponseBody
	@RequestMapping("/editRole")
	private JSON editRole(HttpServletRequest req,HttpServletResponse resp, @RequestParam(value="id",required=true)int id,@RequestParam(value="roleName",required=true)String roleName){
		String trimString = roleName.trim();
		if (isEmpty(trimString)){
			return Message(ERROR, "请填写部门名称", null);
		}
		Role role = roleService.getRoleByRoleName(roleName);
		if (role!=null){
			return Message(ERROR, "当前部门中已存在同名部门，请重新命名", null);
		}
		role = roleService.getRoleById(id);
		if (role==null){
			return Message(ERROR, "该部门不存在。可能冲突操作已删除", null);
		}
		role.setRole(trimString);
		role.setStatus(1);
		roleService.updateOrSave(role);
		return Message(SUCCESS, "部门名修改成功", role);
	}
	
}

